package pe.com.hermes.hermetic.web.controller.consultas;

import pe.com.hermes.hermetic.beans.AuditBean;
import pe.com.hermes.hermetic.beans.ComprobanteServicioBean;
import pe.com.hermes.hermetic.beans.DenomiMonedaBean;
import pe.com.hermes.hermetic.negocio.service.HermeticFacade;
import pe.com.hermes.hermetic.negocio.ultil.ConstantesHermetic;
import pe.com.hermes.hermetic.negocio.ultil.Util;
import pe.com.hermes.hermetic.web.controller.base.IController;

import pe.com.hermes.hermetic.web.controller.base.IWebOpciones;
import pe.com.hermes.hermetic.web.controller.reportes.DetAperturaSobreController;

import pe.com.hermes.hermetic.web.forms.HMF3001Form;

import pe.com.hermes.hermetic.web.forms.HMF3011Form;

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.SessionAttributes;

@Controller
@RequestMapping("/mostrarHWF3011")
@SessionAttributes(value={"form","codOpci","desOpci"})
public class ConsolidadoCuentasController implements IController{
    protected final static Logger logger = Logger.getLogger(DetAperturaSobreController.class);
    protected final static String ACCI_CONS_CNTAS = "HCN";
    @Autowired
    private HermeticFacade servicioHermetic;
    
    @RequestMapping(method={RequestMethod.GET})    
    protected String showForm(ModelMap model,HttpServletRequest request)throws Exception{
        HttpSession session = request.getSession(false);
        if (session.getAttribute("usuario") == null)
            return FORM_SESSION_FINISH;
        List listaTransacciones = (List)session.getAttribute("listaMenu3");
        if (!Util.validaAccesoOpcion(listaTransacciones, ConstantesHermetic.REPORTE_INGRESO_SALIDA_GENERAL)) {
            return FORM_ACCESS_NULL_VIEW;
        }
        HMF3011Form form = new HMF3011Form();
        List listaCuentas = new ArrayList();
        String fecha = "";
        try{
            String cliente = (String)request.getSession().getAttribute("cliente");
            String sucursal = (String)request.getSession().getAttribute("sucursal");
            form.setControl(ConstantesHermetic.CTE_CONTROL_ACTIVO);
            form.setFormulario(ConstantesHermetic.CTE_REPORTE_HMR3001);
            form.setCliente(cliente);
            form.setSucursal(sucursal);
            try {
                listaCuentas = servicioHermetic.getCuentasVisible(sucursal, cliente);
            }
            catch (Exception e) {
                logger.error(e);
                listaCuentas = new ArrayList();
            }
            try {
                fecha = servicioHermetic.getFechaHoy();
            }
            catch (Exception e) {
                logger.error(e);
                fecha = "";
            }
            AuditBean auditBean = new AuditBean(CONSOL_CNTA);
            servicioHermetic.inseAudit(auditBean);
        }catch(Exception e){
            logger.error(e);
        }
        form.setFechaProceso(fecha);
        model.put("listaCuentas",listaCuentas);
        String codOpci = IWebOpciones.CONSOL_CNTA;
        String desOpci = servicioHermetic.getDesOpci(codOpci, request);
        model.put("codOpci",codOpci);
        model.put("desOpci",desOpci);
        model.put(FORM_KEY,form);
        return FORM_CONSOL_CNTAS;
    }
    
    
    @RequestMapping(params={"accion=mostrar"})    
    protected String mostrar(ModelMap model,@ModelAttribute(FORM_KEY) HMF3011Form form,HttpServletRequest request)throws Exception{
        HttpSession session = request.getSession(false);
        if (session.getAttribute("usuario") == null)
            return FORM_SESSION_FINISH;
        List listaTransacciones = (List)session.getAttribute("listaMenu3");
        if (!Util.validaAccesoOpcion(listaTransacciones, ConstantesHermetic.REPORTE_INGRESO_SALIDA_GENERAL)) {
            return FORM_ACCESS_NULL_VIEW;
        }
        form.setControl(ConstantesHermetic.CTE_CONTROL_ACTIVO);
        List listaCuentas = new ArrayList();
        List listaDenominacion = new ArrayList();
        List listaFormato = new ArrayList();
        double suma1 = 0;
        double suma2 = 0;
        double suma3 = 0;
        double suma4 = 0;
        double suma5 = 0;
        double sumaT = 0;
        DecimalFormatSymbols dfs = new DecimalFormatSymbols();
        dfs.setDecimalSeparator('.');
        dfs.setGroupingSeparator(',');
        DecimalFormat df1 = new DecimalFormat("###,###,##0.00", dfs);
        df1.setGroupingSize(3);
        try{
            try {
                listaCuentas = servicioHermetic.getCuentasVisible(form.getSucursal(), form.getCliente());
            }
            catch (Exception e) {
                logger.error(e);
                listaCuentas = new ArrayList();
            }
            try {
                int tipoUnidad = servicioHermetic.getTipoUnidadMonetariaListaCuenta(form.getSucursal(),form.getCliente(),Util.arrayToString(form.getCuentasSelecc(),","),form.getModulo());
                listaDenominacion = servicioHermetic.getDenominacionMonedaListaCuenta(String.valueOf(tipoUnidad), form.getCliente(), form.getSucursal(),Util.arrayToString(form.getCuentasSelecc(),","),form.getModulo(),form.getFechaProceso());                
                
                if (listaDenominacion != null) {                    
                    for (int i = 0; i < listaDenominacion.size(); i++) {
                        DenomiMonedaBean bean = new DenomiMonedaBean();
                        DenomiMonedaBean beanFormat = new DenomiMonedaBean();
                        bean = (DenomiMonedaBean)listaDenominacion.get(i);
                        suma1 = suma1 + Double.parseDouble(bean.getSaldo1());
                        suma2 = suma2 + Double.parseDouble(bean.getSaldo2());
                        suma3 = suma3 + Double.parseDouble(bean.getSaldo3());
                        suma4 = suma4 + Double.parseDouble(bean.getSaldo4());
                        suma5 = suma5 + Double.parseDouble(bean.getSaldo5());
                        beanFormat.setDesTipo(bean.getDesTipo());
                        beanFormat.setTipoMoneda(bean.getTipoMoneda());
                        beanFormat.setCodDenominacion(bean.getCodDenominacion());
                        beanFormat.setValor(df1.format(Double.parseDouble(bean.getValor())));
                        beanFormat.setSaldo1(df1.format(Double.parseDouble(bean.getSaldo1())));
                        beanFormat.setSaldo2(df1.format(Double.parseDouble(bean.getSaldo2())));
                        beanFormat.setSaldo3(df1.format(Double.parseDouble(bean.getSaldo3())));
                        beanFormat.setSaldo4(df1.format(Double.parseDouble(bean.getSaldo4())));
                        beanFormat.setSaldo5(df1.format(Double.parseDouble(bean.getSaldo5())));
                        beanFormat.setTotal2(df1.format(Double.parseDouble(bean.getSaldo1()) + 
                                                        Double.parseDouble(bean.getSaldo2()) + 
                                                        Double.parseDouble(bean.getSaldo3()) + 
                                                        Double.parseDouble(bean.getSaldo4()) + 
                                                        Double.parseDouble(bean.getSaldo5())));
                        listaFormato.add(beanFormat);
                    }
                    sumaT = suma1 + suma2 + suma3 + suma4 + suma5;

                    
                }     
                ComprobanteServicioBean totales = 
                    new ComprobanteServicioBean();
                totales = servicioHermetic.getDetalleCSConsolidado(form.getFechaProceso(),form.getCliente(), Util.arrayToString(form.getCuentasSelecc(),","), form.getModulo(), form.getSucursal());
                if (totales.getCantidad() != null)
                    model.put("cantidadT", totales.getCantidad());
                else
                    model.put("cantidadT", "0");
                if (totales.getTotal() != null) {
                    model.put("totalT", Util.getDoubleFormatted((Double.parseDouble(totales.getTotal()))));
                    sumaT = sumaT + Double.parseDouble(totales.getTotal());
                } else
                    model.put("totalT", "0.00");

                
            }
            catch (Exception e) {
                logger.error(e);
                listaCuentas = new ArrayList();
            }          
        }catch(Exception e){
            logger.error(e);
        }
        model.put("suma1", df1.format(suma1));
        model.put("suma2", df1.format(suma2));
        model.put("suma3", df1.format(suma3));
        model.put("suma4", df1.format(suma4));
        model.put("suma5", df1.format(suma5));
        model.put("sumaT", df1.format(sumaT));
        model.put("totalS", df1.format(sumaT));
        model.put("listaDenominacion", listaFormato);
        model.put("listaCuentas",listaCuentas);
        model.put(FORM_KEY,form);
        return FORM_CONSOL_CNTAS;
    }
}
